package com.alibaba.algo.entity.user;

import com.alibaba.algo.core.base.BaseEntity;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import org.springframework.util.ObjectUtils;

import java.lang.reflect.Field;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * 类SysEmployee.java的实现描述：员工 entity
 *
 * @author nieganggang 2021-03-12 16:08:17
 */
@Data
public class SysEmployee extends BaseEntity {

    /**
     * 工号
     */
    @ExcelProperty("工号")
    private String employeeCode;

    /**
     * 姓名
     */
    @ExcelProperty("姓名")
    private String employeeName;

    /**
     * 手机号码
     */
    @ExcelProperty("手机号码")
    private String mobilePhone;

    /**
     * 办公电话
     */
    @ExcelProperty("办公电话")
    private String officePhone;

    /**
     * 办公地址
     */
    @ExcelProperty("办公地址")
    private String officeAddress;

    /**
     * 邮箱
     */
    @ExcelProperty("邮箱")
    private String email;

    /**
     * 员工类型 1外包 2内部
     */
    @ExcelProperty("员工类型")
    private Long employeeType;

    /**
     * 有效开始时间
     */
//    @ExcelProperty("有效开始时间")
    @ExcelIgnore
    private Date expireStarttime;

    /**
     * 有效结束时间
     */
//    @ExcelProperty("有效结束时间")
    @ExcelIgnore
    private Date expireEndtime;

    /**
     * 员工列表
     */
    @ExcelIgnore
    private List<Long> employeeIdList;

    /**
     * 工号列表
     */
    @ExcelIgnore
    private List<String> employeeCodeList;

    /**
     * 组织名称
     */
    @ExcelProperty("组织名称")
    private String orgName;
    @ExcelIgnore
    private Long orgId;
    @ExcelIgnore
    private Long positionId;

    @ExcelProperty("岗位名称")
    private String positionName;
    /**
     * 性别
     */
    @ExcelProperty("性别")
    private String gender;

    /**
     * 英文名
     */
    @ExcelProperty("英文名")
    private String employeeEnglishName;

    /**
     * 排序号
     */
    @ExcelProperty("排序号")
    private String employeeOrderNo;

    /**
     * 政治面貌
     */
    @ExcelProperty("政治面貌")
    private String politicalFace;

    /**
     * 学历
     */
    @ExcelProperty("学历")
    private String degree;

    /**
     * 职称
     */
    @ExcelProperty("职称")
    private String professionalTitle;

    /**
     * 数据来源："501"-系统录入；"502"-SAP
     */
    @ExcelIgnore
    private String dataSource;

    /**
     * 是否是删除的员工
     */
    @ExcelIgnore
    private String isDeletedEmployee;


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        SysEmployee employee = (SysEmployee) o;
        return employeeCode.equals(employee.employeeCode);
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), employeeCode);
    }

    /**
     * 判空
     *
     * @return
     */
    public boolean isEmpty() {
        for (Field field : this.getClass().getDeclaredFields()) {
            try {
                field.setAccessible(true);
                if (!ObjectUtils.isEmpty(field.get(this))) {
                    return false;
                }
            } catch (IllegalAccessException e) {

            }
        }
        return true;
    }
}
